Parallel Query Execution কী?
Parallel Query Execution (প্যারালাল কোয়েরি এক্সিকিউশন) হলো একটি কৌশল, যার মাধ্যমে একাধিক SQL কোয়েরি একসাথে (একই সময়) এক্সিকিউট করা হয়, ফলে ডেটাবেস অপারেশনের সময় কমে এবং কর্মক্ষমতা বৃদ্ধি পায়। সাধারণত, একাধিক কোয়েরি একে অপরের উপর নির্ভর না করলে তাদের একসাথে এক্সিকিউট করা যেতে পারে, যা সামগ্রিক সময় কমানোর জন্য খুবই কার্যকরী।
পিএইচপি এবং মাইএসকিউএল ব্যবহার করে একাধিক কোয়েরি একসাথে এক্সিকিউট করা সম্ভব, তবে পিএইচপি এক্সিকিউশন থ্রেড-ভিত্তিক নয়, অর্থাৎ এটি একক থ্রেডে কাজ করে। তবুও, কিছু কৌশল ব্যবহার করে পিএইচপি দিয়ে প্যারালাল কোয়েরি এক্সিকিউশন করা সম্ভব।
পিএইচপি দিয়ে Parallel Query Execution করার পদ্ধতি
পিএইচপি মাইএসকিউএল কোয়েরি এক্সিকিউশন সিঙ্ক্রোনাস (Synchronous), অর্থাৎ এক কোয়েরি এক্সিকিউট হওয়ার পর পরবর্তী কোয়েরি চালানো হয়। কিন্তু, multi_query() ফাংশন বা পিএইচপি থ্রেডিং ব্যবহার করে এই এক্সিকিউশন পদ্ধতিকে প্যারালাল করা যেতে পারে।
১. multi_query() ফাংশন ব্যবহার করে Parallel Query Execution
MySQLi এক্সটেনশন পিএইচপি তে একাধিক কোয়েরি একসাথে এক্সিকিউট করার জন্য multi_query() ফাংশন প্রদান করে। এই ফাংশনটি একাধিক SQL কোয়েরি একসাথে পাঠিয়ে তাদের সমান্তরালভাবে (parallel) এক্সিকিউট করতে সক্ষম।
উদাহরণ: multi_query() ব্যবহার করা
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
// চেক করুন যদি সংযোগ সফল হয়
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
// একাধিক কোয়েরি
$sql = "SELECT * FROM users; SELECT * FROM orders; SELECT * FROM products;";
// multi_query() ব্যবহার করে একসাথে একাধিক কোয়েরি পাঠানো
if ($mysqli->multi_query($sql)) {
do {
// একেকটি কোয়েরি ফলাফল প্রক্রিয়া করা
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_assoc()) {
// ফলাফল প্রদর্শন করা
print_r($row);
}
$result->free();
}
} while ($mysqli->more_results() && $mysqli->next_result());
}
$mysqli->close();
?>
এখানে, তিনটি SELECT কোয়েরি একসাথে multi_query() ফাংশন ব্যবহার করে এক্সিকিউট করা হয়েছে। এই ফাংশনটি প্রথমে কোয়েরি পাঠায় এবং তারপর প্রতিটি কোয়েরির ফলাফল (যদি থাকে) একে একে প্রক্রিয়া করে।
কাজের ধাপ:
multi_query()ফাংশনটি একাধিক কোয়েরি একসাথে পাঠিয়ে দেয়।do...whileলুপের মাধ্যমে প্রতিটি কোয়েরির ফলাফল প্রক্রিয়া করা হয়।next_result()ফাংশনটি পরবর্তী কোয়েরির জন্য ফলাফল প্রস্তুত করে।
এটি কার্যকরী একটি পদ্ধতি, যেখানে একাধিক কোয়েরি একসাথে এক্সিকিউট করা হয়, তবে এটি সম্পূর্ণ প্যারালাল নয় (একক থ্রেডে কাজ করছে, তবে একাধিক কোয়েরি প্রক্রিয়া হচ্ছে)।
২. cURL দিয়ে Parallel Query Execution
যেহেতু পিএইচপি থ্রেড-ভিত্তিক নয়, তাই একাধিক কোয়েরি একসাথে এক্সিকিউট করার জন্য cURL ব্যবহার করা যেতে পারে, যা HTTP রিকোয়েস্টগুলোকে প্যারালালভাবে প্রক্রিয়া করতে সক্ষম।
এই কৌশলটি মূলত তখন ব্যবহার হয়, যখন ডেটাবেস কোয়েরি API-র মাধ্যমে ওয়েব সার্ভিস বা মাইএসকিউএল সার্ভারের সাথে ইন্টারঅ্যাক্ট করে।
উদাহরণ: cURL ব্যবহার করে Parallel Query Execution
<?php
// cURL হ্যান্ডলার তৈরি করা
$ch1 = curl_init();
$ch2 = curl_init();
// প্রথম কোয়েরি
curl_setopt($ch1, CURLOPT_URL, "http://example.com/query1");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
// দ্বিতীয় কোয়েরি
curl_setopt($ch2, CURLOPT_URL, "http://example.com/query2");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
// একসাথে cURL রিকোয়েস্ট পাঠানো
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// cURL রিকোয়েস্ট সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করা
$running = null;
do {
curl_multi_exec($mh, $running);
} while ($running > 0);
// ফলাফল সংগ্রহ করা
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// cURL হ্যান্ডলার বন্ধ করা
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
// ফলাফল প্রদর্শন করা
echo $response1;
echo $response2;
?>
এখানে, curl_multi_* ফাংশনগুলি ব্যবহার করে দুটি HTTP রিকোয়েস্ট একসাথে পাঠানো হচ্ছে এবং প্যারালালভাবে প্রক্রিয়া হচ্ছে। আপনি যখন এই কৌশলটি ব্যবহার করেন, তখন ডেটাবেস কোয়েরি যেমন HTTP API রিকোয়েস্ট হয়ে থাকে, সে ক্ষেত্রে এটি কার্যকরী।
৩. Threading ব্যবহার করে Parallel Query Execution
পিএইচপি থ্রেডিং সম্ভবত একটি উন্নত কৌশল হতে পারে, যেহেতু এটি মাল্টি-থ্রেডিং সমর্থন করে। থ্রেডিং ব্যবহার করে আপনি প্যারালাল কোয়েরি এক্সিকিউশন করতে পারেন, তবে এটি পিএইচপি-এর স্ট্যান্ডার্ড ইন্টারপ্রেটারে সমর্থিত নয়, বরং pthreads এক্সটেনশন ব্যবহার করে করা যেতে পারে (যা বর্তমানে পিএইচপি 7.2-এর পরে আর সমর্থিত নয়, তবে পিএইচপি 7.4 বা তার আগের সংস্করণে ব্যবহার করা যেতে পারে)।
এটি থ্রেডিং লাইব্রেরির মাধ্যমে একাধিক কোয়েরি একসাথে চালানোর ক্ষমতা দেয়, তবে সাধারণত এই পদ্ধতি কিছুটা জটিল হতে পারে এবং সার্ভারের পারফরম্যান্সের উপর নির্ভরশীল।
সারাংশ
পিএইচপি মাইএসকিউএল এর মাধ্যমে প্যারালাল কোয়েরি এক্সিকিউশন করা সম্ভব, কিন্তু এটি সাধারণভাবে সিঙ্ক্রোনাস পদ্ধতির উপর ভিত্তি করে কাজ করে। multi_query() ফাংশনটি পিএইচপি মাইএসকিউএল এর মাধ্যমে একাধিক কোয়েরি একসাথে এক্সিকিউট করার জন্য ব্যবহৃত হয়। তবে, যদি পুরোপুরি প্যারালাল এক্সিকিউশন চান, তাহলে cURL বা থ্রেডিং (যদি সমর্থিত হয়) ব্যবহার করা যেতে পারে। এই পদ্ধতিগুলি দ্রুত ডেটাবেস অপারেশনের সময় কমাতে সাহায্য করে এবং আপনার অ্যাপ্লিকেশনকে আরও কার্যকরী ও দ্রুত করে তোলে।
Read more